<?php
include_once('inc/functions.inc.php');

if (!isEmpty(getParam('operation'))) {

    switch (getParam('operation')) {
        case 'gm':
            contabilidad_getMovimientos($db);
            break;
        case 'cgcun':
            contabilidad_getCuentasUltimoNivel($db);
            break;
            die();
        case 's':
            contabilidad_partidasSave($db);
            break;
        case 'gc':
            contabilidad_getCiclo($db);
            break;
    }
}

function contabilidad_getMovimientos($db) {

    $empresa = getParam('empresa');
    $cuenta = getParam('cuenta');
    $fechaI = getParam("fechaI");
    $fechaI = implode(array_reverse(explode("-", $fechaI)));
    $fechaF = getParam("fechaF");
    $fechaF = implode(array_reverse(explode("-", $fechaF)));
    ?>
    <div id="frmMovimientos-resultado-fecha" style="border-bottom: 1px solid black; font-weight: bold;">Fecha</div>
    <div id="frmMovimientos-resultado-cuenta" style="border-bottom: 1px solid black; font-weight: bold;">Nombre de la cuenta</div>
    <div id="frmMovimientos-resultado-partida" style="border-bottom: 1px solid black; font-weight: bold;">No. partida</div>
    <div id="frmMovimientos-resultado-descripcion"  style="border-bottom: 1px solid black; font-weight: bold;">Descripción</div>
    <div id="frmMovimientos-resultado-debe" style="border-bottom: 1px solid black; font-weight: bold;">Debe</div>
    <div id="frmMovimientos-resultado-haber" style="border-bottom: 1px solid black; font-weight: bold;">Haber</div>
    <?php
    $strQuery = "";
    $strWhere = "";
    $sinDebe = 0;
    $sinHaber = 0;
    $sinTotalDebe = 0;
    $sinTotalHaber = 0;

    if (!empty($cuenta)) {
        $strWhere = " AND cllg_contab_cuenta_ajuste.cuenta = '{$cuenta}'";
    }

    $strQuery = "SELECT  DATE_FORMAT(cllg_contab_ajuste.fecha, '%d-%m-%Y') AS fecha,
                        cllg_contab_cuenta.codigo,
                        cllg_contab_cuenta.nombre,
                        cllg_contab_ajuste.id,
                        cllg_contab_ajuste.descripcion,
                        cllg_contab_cuenta_ajuste.debe,
                        cllg_contab_cuenta_ajuste.haber,
                        cllg_contab_cuenta_ajuste.monto
                         
                 FROM   cllg_contab_cuenta,
                        cllg_contab_ajuste, 
                        cllg_contab_cuenta_ajuste 
                 WHERE  cllg_contab_cuenta.codigo = cllg_contab_cuenta_ajuste.cuenta
                 AND    cllg_contab_ajuste.id = cllg_contab_cuenta_ajuste.ajuste 
                 AND    cllg_contab_ajuste.fecha >= '{$fechaI}' 
                 AND    cllg_contab_ajuste.fecha <= '{$fechaF}'
                 {$strWhere} 
                 ORDER  BY cllg_contab_cuenta_ajuste.cuenta, cllg_contab_ajuste.fecha ";
    $qTMP = $db->query($strQuery);
    $intNumRows = $db->num_rows;

    if ($intNumRows) {

        $strCodigo = "";
        while ($rTMP = $db->fetch_array($qTMP)) {

            $sinDebe = ( $rTMP["debe"] == 1 ) ? $rTMP["monto"] : 0;
            $sinHaber = ( $rTMP["haber"] == 1 ) ? $rTMP["monto"] : 0;
            //$sinTotalDebe += $sinDebe;
            //$sinTotalHaber += $sinHaber;
            if (empty($cuenta) && $strCodigo != $rTMP["codigo"]) {
                ?>
                <div style="width: 1200px; height: 25px; float: left; background-color: #ccc; text-align: left; vertical-align:text-bottom; font-weight: bold;"><?php print $rTMP["codigo"] . " - " . $rTMP["nombre"]; ?></div>
                <?php
                $strCodigo = $rTMP["codigo"];
            }
            ?>
            <div id="frmMovimientos-resultado-fecha"><?php print $rTMP["fecha"]; ?></div>
            <div id="frmMovimientos-resultado-cuenta"><?php print $rTMP["codigo"] . " - " . $rTMP["nombre"]; ?></div>
            <div id="frmMovimientos-resultado-partida"><?php print $rTMP["id"]; ?></div>
            <div id="frmMovimientos-resultado-descripcion" style="font-size: 11px; text-align: justify;" title="<?php print $rTMP["descripcion"]; ?>"><?php print crop_string($rTMP["descripcion"], 40, true, true); ?></div>
            <div id="frmMovimientos-resultado-debe"><?php print ( $sinDebe > 0 ) ? number_format($sinDebe, 2) : "&nbsp;"; ?></div>
            <div id="frmMovimientos-resultado-haber"><?php print ( $sinHaber > 0 ) ? number_format($sinHaber, 2) : "&nbsp;"; ?></div>
            <?php
        }
        $strQuery = " SELECT  sum(cllg_contab_cuenta_ajuste.monto) total                         
                 FROM   cllg_contab_cuenta,
                        cllg_contab_ajuste, 
                        cllg_contab_cuenta_ajuste 
                 WHERE  cllg_contab_cuenta.codigo = cllg_contab_cuenta_ajuste.cuenta
                 AND    cllg_contab_ajuste.id = cllg_contab_cuenta_ajuste.ajuste 
                 AND    cllg_contab_ajuste.fecha >= '{$fechaI}' 
                 AND    cllg_contab_ajuste.fecha <= '{$fechaF}' and debe=1
                 {$strWhere} ";
        $qTMP = $db->query($strQuery);
        $rTMP = $db->fetch_array($qTMP);
        $sinTotalDebe = $rTMP["total"];
        $strQuery = "SELECT  sum(cllg_contab_cuenta_ajuste.monto) total                         
                 FROM   cllg_contab_cuenta,
                        cllg_contab_ajuste, 
                        cllg_contab_cuenta_ajuste 
                 WHERE  cllg_contab_cuenta.codigo = cllg_contab_cuenta_ajuste.cuenta
                 AND    cllg_contab_ajuste.id = cllg_contab_cuenta_ajuste.ajuste 
                 AND    cllg_contab_ajuste.fecha >= '{$fechaI}' 
                 AND    cllg_contab_ajuste.fecha <= '{$fechaF}' and haber=1
                 {$strWhere}  
              ";
        $qTMP = $db->query($strQuery);
        $rTMP = $db->fetch_array($qTMP);
        $sinTotalHaber = $rTMP["total"];
        ?>
        <div id="frmMovimientos-resultado-fecha" style="border-top: 1px solid black;">&nbsp;</div>
        <div id="frmMovimientos-resultado-cuenta" style="border-top: 1px solid black;">&nbsp;</div>
        <div id="frmMovimientos-resultado-partida" style="border-top: 1px solid black;">&nbsp;</div>
        <div id="frmMovimientos-resultado-descripcion" style="border-top: 1px solid black; font-weight: bold;">Sub-Total</div>
        <div id="frmMovimientos-resultado-debe" style="border-top: 1px solid black; font-weight: bold;"><?php print number_format($sinTotalDebe, 2); ?></div>
        <div id="frmMovimientos-resultado-haber"  style="border-top: 1px solid black; font-weight: bold;"><?php print number_format($sinTotalHaber, 2); ?></div>
        <?php
    } else {
        ?>
        <div id="frmMovimientos-resultado-fecha">&nbsp;</div>
        <div id="frmMovimientos-resultado-cuenta">&nbsp;</div>
        <div id="frmMovimientos-resultado-partida">&nbsp;</div>
        <div id="frmMovimientos-resultado-descripcion">&nbsp;</div>
        <div id="frmMovimientos-resultado-debe">&nbsp;</div>
        <div id="frmMovimientos-resultado-haber">&nbsp;</div>
        <div class="ui-widget" style="border: 0px solid white; width: 900px; height: auto; vertical-align: bottom; float: left;" align="center">
            <div class="ui-state-highlight ui-corner-all" style="margin-top: 0px; padding: 0pt 0.7em; height: auto; width: 400px;">
                <span class="ui-icon ui-icon-info" style="float: left; margin-right: 0.3em;"></span>No se encontraron registros.
            </div>
        </div>
        <?php
    }

    $db->free_result($qTMP);
}

function crop_string($text, $maxlen, $boolAddDots = true, $boolFillSpaces = false) {
    if (strlen($text) <= $maxlen) {
        if ($boolFillSpaces) {
            $intSpacesToFill = $maxlen - strlen($text);
            $text .= str_repeat(" ", $intSpacesToFill);
        }
        return $text;
    } else
    if ($boolAddDots)
        return(trim(substr($text, 0, ($maxlen - 3))) . "..." );
    else
        return(trim(substr($text, 0, $maxlen)));
}

function contabilidad_getCuentasUltimoNivel($db) {

    $arrResult = array();
    $empresa = getParam("empresa");
    $term = getParam("term");
    $strQuery = "SELECT c1.* FROM cllg_contab_cuenta c1
                 LEFT JOIN cllg_contab_cuenta c2 ON(c1.codigo = c2.fk_padre AND c1.fk_empresa = c2.fk_empresa )
                 WHERE (c1.codigo LIKE '%{$term}%' OR c1.nombre LIKE '%{$term}%') 
                 AND    c1.fk_empresa = '{$empresa}'
                 AND    c2.codigo IS NULL";
    $qTMP = $db->query($strQuery);

    if ($rTMP = $db->fetch_array($qTMP)) {

        do {
            $arrTMP = array();
            $arrTMP["id"] = utf8_encode($rTMP["codigo"]);
            $arrTMP["value"] = utf8_encode($rTMP["codigo"] . " - " . $rTMP["nombre"]);

            array_push($arrResult, $arrTMP);
        } while ($rTMP = $db->fetch_array($qTMP));
    }
    $db->free_result($rTMP);

    print json_encode($arrResult);
}

function contabilidad_partidasSave($db) {

    //drawDebug($_POST);
    $intID = 0;
    $debe = 0;
    $haber = 0;
    $monto = 0;
    $empresa = getParam("empresa");
    $fecha = getParam("frmPartidas_fecha");
    $fecha = implode(array_reverse(explode("-", $fecha)));

    $monto = sqlValue(getParam("txtTotalDebe"), "float");
    $descripcion = sqlValue(getParam("frmPartidas_descripcion"), "text");

    $strQuery = "SELECT * 
                 FROM   cllg_contab_ciclo 
                 WHERE  activo = '1' 
                 AND    fecha_inicio <= '{$fecha}' 
                 AND    fecha_fin >= '{$fecha}'
                 AND    total_activo > 0 
                 AND    total_pasivo > 0
                 AND    fk_empresa = '{$empresa}'";
    $qTMP = $db->query($strQuery);
    $intCicloCerrado = $db->num_rows;
    $db->free_result($qTMP);

    $strQuery = "SELECT * 
                 FROM   cllg_contab_ciclo 
                 WHERE  activo = '1' 
                 AND    fecha_inicio <= '{$fecha}' 
                 AND    fecha_fin >= '{$fecha}'
                 AND    fk_empresa = '{$empresa}'";
    $qTMP = $db->query($strQuery);
    $intCicloCorrecto = $db->num_rows;
    $db->free_result($qTMP);


    if ($intCicloCerrado > 0) {
        ?>
        <div class="ui-widget" style="border: 0px solid white; width: 900px; height: auto; vertical-align: bottom;" align="center">
            <div class="ui-state-error ui-corner-all" style="margin-top: 0px; padding: 0pt 0.7em; height: auto; width: 450px;"> 
                <p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: 0.3em;"></span>
                    No se puede ingresar partida en una fecha ya cerrada.</p>
            </div>
        </div>
        <br>
        <?php
    } else if ($intCicloCorrecto == 0) {
        ?>
        <div class="ui-widget" style="border: 0px solid white; width: 900px; height: auto; vertical-align: bottom;" align="center">
            <div class="ui-state-error ui-corner-all" style="margin-top: 0px; padding: 0pt 0.7em; height: auto; width: 450px;"> 
                <p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: 0.3em;"></span>
                    La fecha de la partida no esta configurada.</p>
            </div>
        </div>
        <br>
        <?php
    } else {

        $strQuery = "SELECT * FROM cllg_contab_ciclo WHERE activo = '1' AND fk_empresa = '{$empresa}'";
        $qTMP = $db->query($strQuery);
        $intNumRows = $db->num_rows;
        $rTMP = $db->fetch_array($qTMP);
        $intCiclo = $rTMP["codigo"];
        $db->free_result($qTMP);
        if ($intNumRows > 0) {

            $strQuery = "INSERT INTO cllg_contab_ajuste 
                         (id, fecha, monto, ciclo, descripcion)
                         VALUES
                         (NULL, '{$fecha}', {$monto}, '{$intCiclo}', {$descripcion})";
            $db->query($strQuery);
            $intID = mysql_insert_id($db->link_id);

            if ($intID > 0) {

                while ($arrPost = each($_POST)) {

                    $arrExplode = explode("_", $arrPost["key"]);

                    if ($arrExplode[0] == "hdnCuenta" && $arrPost["value"] > 0) {

                        $debe = getParam("txtDebe_" . $arrExplode[1]);
                        $haber = getParam("txtHaber_" . $arrExplode[1]);
                        if ($debe > 0 && $haber == 0) {
                            $monto = $debe;
                            $debe = 1;
                            $haber = 0;
                        } else if ($debe == 0 && $haber > 0) {
                            $monto = $haber;
                            $debe = 0;
                            $haber = 1;
                        }
                        $strQuery = "INSERT INTO cllg_contab_cuenta_ajuste 
                                     (cuenta, debe, haber, monto, ajuste)
                                     VALUES
                                     ('{$arrPost["value"]}', '{$debe}', '{$haber}', '{$monto}', '{$intID}')";
                        $db->query($strQuery);
                    }
                }
                ?>
                <div class="ui-widget" style="border: 0px solid white; width: 900px; height: auto; vertical-align: bottom;" align="center">
                    <div class="ui-state-highlight ui-corner-all" style="margin-top: 0px; padding: 0pt 0.7em; height: auto; width: 220px;"> 
                        <p><span class="ui-icon ui-icon-info" style="float: left; margin-right: 0.3em;"></span>
                            Partida ingresada No. <?php print $intID; ?></p>
                    </div>
                </div>
                <br>
                <?php
            }
        }
    }
}

function contabilidad_getCiclo($db) {

    $arrResult = array();
    $empresa = getParam("empresa");
    $fecha = getParam("fecha");
    $fecha = implode(array_reverse(explode("-", $fecha)));
    $strQuery = "SELECT * 
                 FROM   cllg_contab_ciclo
                 WHERE  activo = '1' AND fecha_inicio <= '{$fecha}' AND fecha_fin >= '{$fecha}'";
    $qTMP = $db->query($strQuery);
    $intNumRows = $db->num_rows;
    $db->free_result($qTMP);
    if ($intNumRows > 0) {
        $arrResult["return"] = true;
    } else {
        $arrResult["return"] = false;
    }

    print json_encode($arrResult);
}
?>